package cn.virens.server.aio;

import java.util.Set;

import cn.virens.server.aio.channel.AioChannel;
import cn.virens.server.aio.packet.AioWritePacket;

public interface AioServerManage {

	String getHost();

	Integer getPort();

	boolean isWaitStop();

	/**
	 * 解绑/断开连接
	 * 
	 * @param aioChannel 连接
	 */
	void unbindUid(AioChannel aioChannel);

	/**
	 * 绑定连接的用户ID
	 * 
	 * @param aioChannel 连接
	 * @param uid        用户ID
	 */
	void bindUid(AioChannel aioChannel, String uid);

	/**
	 * 数据发送到指定连接
	 * 
	 * @param uid    用户ID
	 * @param packet 数据包
	 */
	void send(String uid, AioWritePacket packet);

	/**
	 * 数据发送到指定连接
	 * 
	 * @param aioChannel 连接
	 * @param packet     数据包
	 */
	void send(AioChannel aioChannel, AioWritePacket packet);

	/**
	 * 根据用户ID获取连接
	 * 
	 * @param  uid 用户ID
	 * @return
	 */
	AioChannel getChannel(String uid);

	/**
	 * 获取当前所有连接
	 * 
	 * @return
	 */
	Set<AioChannel> getChannelAll();

	/**
	 * 获取当前已绑定所有连接
	 * 
	 * @return
	 */
	Set<String> getChannelKeys();

}
